<% # TODO: lots of overlap with add_predecessor --> helpers?
  if @removed -%>
  TracksPages.page_inform("<%= t('todos.removed_predecessor', :successor => @successor.description, :predecessor => @predecessor.description) %>");

  replace_updated_predecessor();
  regenerate_predecessor_family();
  update_successor();
<% else -%>
  TracksPages.page_error("<%=t('todos.error_removing_dependency')%>");
<% end -%>

function replace_updated_predecessor() {
  $('#<%= dom_id(@predecessor) %>').replaceWith( html_for_predecessor() );
}

function regenerate_predecessor_family() {
<%
  parents = @predecessors.to_a
  until parents.empty?
    parent = parents.pop
    parents += parent.predecessors -%>
    $('#<%= dom_id(parent) %>').html("<%= js_render(parent, { :parent_container_type => parent_container_type }) %>");
<%end -%>
}

function update_successor() {
  <%
  if @successor.active? -%>
    <%= "remove_successor();" unless source_view_is(:todo) %>
    <%= "hide_empty_message();" unless empty_container_msg_div_id.nil? %>
    <%= "show_empty_deferred_message(); " if @remaining_deferred_or_pending_count == 0 %>
    <% if source_view_is_one_of(:todo, :deferred, :tag) -%>
      $('#c<%= @successor.context_id %>').fadeIn(500, function() {});
      $('#no_todos_in_view').slideUp(100);
    <% end -%>
    var container = $('#<%=item_container_id(@successor)%>_items');
    container.append(html_for_new_successor());
    TracksPages.sort_container(container);
    $('#<%= dom_id(@successor, 'line')%>').effect('highlight', {}, 2000 ); <%
  elsif @successor.deferred? -%>
    $('#<%= dom_id(@successor)%>').html(html_for_new_successor()); <%
  end
  %>
}

function hide_empty_message() {
  $('#<%=empty_container_msg_div_id%>').hide();
}

function show_empty_deferred_message() {
  $('#deferred_pending_container-empty-d').slideDown(100);
}

function remove_successor() {
  <% # TODO: last todo in context --> remove context?? -%>
  $('#<%=dom_id(@successor)%>').remove();
}

function html_for_predecessor() {
  return "<%= @removed ? js_render(@predecessor, { :parent_container_type => parent_container_type }) : "" %>";
}

function html_for_new_successor() {
  return "<%= @removed ? js_render(@successor, { :parent_container_type => parent_container_type }) : "" %>";
}